﻿package MemoryDB;

import java.io.Serializable;

import Public.RefObject;

/** 
 内存数据库(行)
 
*/
public class YuanRow implements Serializable
{

	//private bool alreadyDisposed=false;
	//public void Dispose()
	//{
	//	Dispose (true);
	//	System.GC.SuppressFinalize (this);
	//}
	//
	//protected virtual void Dispose(bool disposing)
	//{
	//	if(!alreadyDisposed)
	//	{
	//		if(disposing)
	//		{
	//			
	//		}
	//	}
	//	alreadyDisposed=true;
	//}
	//
	//~YuanRow()
	//{
	//	Dispose (false);
	//}


	private java.util.HashMap<String, YuanColumn> item;

	public final java.util.HashMap<String, YuanColumn> getRowItem()
	{
		return item;
	}
	public final void setRowItem(java.util.HashMap<String, YuanColumn> value)
	{
		item = value;
	}

	private int count;

	public final int getCount()
	{
		return getRowItem().size();
	}


	private YuanRowState rowState = YuanRowState.forValue(0);

	/** 
	 获取或设置行的状态
	 
	 <value>
	 
	 </value>
	*/
	public final YuanRowState getRowState()
	{
		return this.rowState;
	}
	public final void setRowState(YuanRowState value)
	{
		rowState = value;
	}

	private YuanColumn outValue;
	public YuanRow()
	{
		item = new java.util.HashMap<String, YuanColumn>();
		rowState = YuanRowState.Noting;

	}

	public YuanRow(java.util.ArrayList<String> listName)
	{
		item = new java.util.HashMap<String, YuanColumn>();
		rowState = YuanRowState.Noting;
		for (String str : listName)
		{
			Add(str, "");
		}
	}




	//public string this[string rowName]
	//{
	//    get
	//    {
	//        return item[rowName].YuanColumnText.Trim();
	//    }
	//    set
	//    {
	//        if (item.TryGetValue(rowName, out outValue))
	//        {
	//            if (value.Trim() != outValue.YuanColumnText.Trim())
	//            {
	//                item[rowName].YuanColumnText = value.Trim();
	//                rowState = YuanRowState.Update;
	//                item[rowName].YuanColumnState = YuanRowState.Update;
	//            }
	//        }
	//        else
	//        {
	//            //#if UNITY_EDITOR
	//            Debug.LogError("请输入正确的键名");
	//            //#endif
	//        }
	//    }
	//}

	/** 
	 从名字索引获取或设置行<see cref="yuan.YuanMemoryDB.YuanRow"/> 
	 
	 <param name='rowName'>
	 列名
	 
	*/
	public final YuanColumn getItem(String rowName)
	{
		try
		{
			rowState = YuanRowState.Update;
			return getRowItem().get(rowName);
		}
		catch (RuntimeException ex)
		{
			throw ex;
		}
	}
	public final void setItem(String rowName, YuanColumn value)
	{
		if ((outValue = getRowItem().get(rowName)) != null)
		{
			getRowItem().put(rowName, value);

		}
		else
		{

		}

	}

	/** 
	 添加列
	 
	 <param name='rowName'>
	 列名
	 
	 <param name='rowValue'>
	 列值
	 
	*/
	public final void Add(String rowName, String rowValue)
	{
		if (!getRowItem().containsKey(rowName))
		{
			getRowItem().put(rowName, new YuanColumn(rowValue));
		}
		else
		{

		}
	}

	/** 
	 删除列
	 
	 <param name='rowName'>
	 列名
	 
	*/
	public final void Delete(String rowName)
	{
		if (getRowItem().containsKey(rowName))
		{
			getRowItem().remove(rowName);
		}
		else
		{

		}
	}

	/** 
	 清空行
	 
	*/
	public final void Clear()
	{
		getRowItem().clear();
	}



	/** 
	 检查是否具有相应的键
	 
	 @param mKey 键
	 @return 
	*/
	public final boolean ContainsKey(String mKey)
	{
		return this.getRowItem().containsKey(mKey);
	}

	/** 
	 尝试获取对应值
	 
	 @param mKey 键
	 @param mValue
	*/
	public final boolean TryGetValue(String mKey, RefObject<String> mValue)
	{
		YuanColumn yr = null;
		if ((yr = getRowItem().get(mKey)) != null)
		{
			mValue.argvalue = yr.getYuanColumnText();
			return true;
		}
		else
		{
			mValue.argvalue = null;
			return false;
		}
	}

	/** 
	 拷贝数据到新实例
	 
	 @return 
	*/
	public final YuanRow CopyTo()
	{
		YuanRow yr = new YuanRow();
		for (java.util.Map.Entry<String, YuanColumn> item : this.getRowItem().entrySet())
		{
			yr.Add(item.getKey(), item.getValue().getYuanColumnText());
		}
		return yr;
	}


	/** 
	 获取行中的所有列名
	 
	 @return 
	*/
	public final String[] GetColumnsName()
	{
		return (String[])getRowItem().keySet().toArray();
	}
}